From b97ba988216474218bf256b4e89d21e42d295fdd Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sun, 10 Aug 2014 21:36:29 -0700 Subject: [PATCH] Don't pull in dev-deps for `cargo build` Also don't pull them in for `cargo doc`, but continue to pull them in for `cargo run` and `cargo test`. Closes #351 --- src/bin/cargo-build.rs | 1 + src/bin/cargo-doc.rs | 1 + src/bin/cargo-run.rs | 1 + src/bin/cargo-test.rs | 1 + src/cargo/ops/cargo_compile.rs | 11 ++++-- tests/test_cargo_compile_path_deps.rs | 56 ++++++++++++++++++++++----- 6 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/bin/cargo-build.rs b/src/bin/cargo-build.rs index 7261a20df..4d20e607d 100644 --- a/src/bin/cargo-build.rs +++ b/src/bin/cargo-build.rs @@ -54,6 +54,7 @@ fn execute(options: Options, shell: &mut MultiShell) -> CliResult> { shell: shell, jobs: options.flag_jobs, target: options.flag_target.as_ref().map(|t| t.as_slice()), + dev_deps: false, }; ops::compile(&root, &mut opts).map(|_| None).map_err(|err| { diff --git a/src/bin/cargo-doc.rs b/src/bin/cargo-doc.rs index 158db18b8..a59b3d35a 100644 --- a/src/bin/cargo-doc.rs +++ b/src/bin/cargo-doc.rs @@ -47,6 +47,7 @@ fn execute(options: Options, shell: &mut MultiShell) -> CliResult> { shell: shell, jobs: options.flag_jobs, target: None, + dev_deps: false, }, }; diff --git a/src/bin/cargo-run.rs b/src/bin/cargo-run.rs index 546e793c5..510027cda 100644 --- a/src/bin/cargo-run.rs +++ b/src/bin/cargo-run.rs @@ -44,6 +44,7 @@ fn execute(options: Options, shell: &mut MultiShell) -> CliResult> { shell: shell, jobs: options.flag_jobs, target: None, + dev_deps: true, }; let err = try!(ops::run(&root, &mut compile_opts, diff --git a/src/bin/cargo-test.rs b/src/bin/cargo-test.rs index cd3628dbe..cd1ce0e97 100644 --- a/src/bin/cargo-test.rs +++ b/src/bin/cargo-test.rs @@ -46,6 +46,7 @@ fn execute(options: Options, shell: &mut MultiShell) -> CliResult> { shell: shell, jobs: options.flag_jobs, target: options.flag_target.as_ref().map(|s| s.as_slice()), + dev_deps: true, }; let err = try!(ops::run_tests(&root, &mut compile_opts, diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 921bf5841..44d9afb49 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -42,12 +42,14 @@ pub struct CompileOptions<'a> { pub shell: &'a mut MultiShell, pub jobs: Option, pub target: Option<&'a str>, + pub dev_deps: bool, } pub fn compile(manifest_path: &Path, options: &mut CompileOptions) -> CargoResult { - let CompileOptions { update, env, ref mut shell, jobs, target } = *options; + let CompileOptions { update, env, ref mut shell, jobs, target, + dev_deps } = *options; let target = target.map(|s| s.to_string()); log!(4, "compile; manifest-path={}", manifest_path.display()); @@ -79,6 +81,9 @@ pub fn compile(manifest_path: &Path, let mut config = try!(Config::new(*shell, jobs, target.clone())); let mut registry = PackageRegistry::new(&mut config); + let dependencies = package.get_dependencies().iter().filter(|dep| { + dep.is_transitive() || dev_deps + }).map(|d| d.clone()).collect::>(); match try!(ops::load_lockfile(&lockfile, source_id)) { Some(r) => try!(add_lockfile_sources(&mut registry, &package, &r)), @@ -86,13 +91,13 @@ pub fn compile(manifest_path: &Path, } let resolved = try!(resolver::resolve(package.get_package_id(), - package.get_dependencies(), + dependencies.as_slice(), &mut registry)); try!(registry.add_overrides(override_ids)); let resolved_with_overrides = try!(resolver::resolve(package.get_package_id(), - package.get_dependencies(), + dependencies.as_slice(), &mut registry)); let req: Vec = resolved_with_overrides.iter().map(|r| { diff --git a/tests/test_cargo_compile_path_deps.rs b/tests/test_cargo_compile_path_deps.rs index 39cf9cdbb..b05e468e1 100644 --- a/tests/test_cargo_compile_path_deps.rs +++ b/tests/test_cargo_compile_path_deps.rs @@ -1,7 +1,7 @@ use std::io::File; use support::{ResultTest, project, execs, main_file, cargo_dir, path2url}; -use support::{COMPILING, FRESH}; +use support::{COMPILING, FRESH, RUNNING}; use support::paths::PathExt; use hamcrest::{assert_that, existing_file}; use cargo; @@ -120,16 +120,54 @@ test!(cargo_compile_with_root_dev_deps { p2.build(); assert_that(p.cargo_process("cargo-build"), - execs().with_stdout(format!("{} bar v0.5.0 ({})\n\ - {} foo v0.5.0 ({})\n", - COMPILING, p.url(), - COMPILING, p.url()))); + execs().with_status(101)) +}) - assert_that(&p.bin("foo"), existing_file()); +test!(cargo_compile_with_root_dev_deps_with_testing { + let p = project("foo") + .file("Cargo.toml", r#" + [project] - assert_that( - cargo::util::process(p.bin("foo")), - execs().with_stdout("zoidberg\n")); + name = "foo" + version = "0.5.0" + authors = ["wycats@example.com"] + + [dev-dependencies.bar] + + version = "0.5.0" + path = "../bar" + + [[bin]] + name = "foo" + "#) + .file("src/main.rs", + main_file(r#""{}", bar::gimme()"#, ["bar"]).as_slice()); + let p2 = project("bar") + .file("Cargo.toml", r#" + [package] + + name = "bar" + version = "0.5.0" + authors = ["wycats@example.com"] + "#) + .file("src/lib.rs", r#" + pub fn gimme() -> &'static str { + "zoidberg" + } + "#); + + p2.build(); + assert_that(p.cargo_process("cargo-test"), + execs().with_stdout(format!("\ +{compiling} bar v0.5.0 ({url}) +{compiling} foo v0.5.0 ({url}) +{running} target[..]test[..]foo-[..] + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured + +", compiling = COMPILING, url = p.url(), running = RUNNING))); }) test!(cargo_compile_with_transitive_dev_deps { -- 2.30.2